/**
 * SyntaxHighlighter
 * http://alexgorbatchev.com/
 *
 * SyntaxHighlighter is donationware. If you are using it, please donate.
 * http://alexgorbatchev.com/wiki/SyntaxHighlighter:Donate
 *
 * @version
 * 2.0.320 (May 03 2009)
 * 
 * @copyright
 * Copyright (C) 2004-2009 Alex Gorbatchev.
 *
 * @license
 * This file is part of SyntaxHighlighter.
 * 
 * SyntaxHighlighter is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * SyntaxHighlighter is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with SyntaxHighlighter.  If not, see <http://www.gnu.org/copyleft/lesser.html>.
 */
if (!window.SyntaxHighlighter) {
    var SyntaxHighlighter = function () {
            var sh = {
                defaults: {
                    "class-name": "",
                    "first-line": 1,
                    "highlight": null,
                    "smart-tabs": true,
                    "tab-size": 4,
                    "ruler": false,
                    "gutter": true,
                    "toolbar": true,
                    "collapse": false,
                    "auto-links": true,
                    "light": false,
                    "wrap-lines": true
                },
                config: {
                    clipboardSwf: null,
                    toolbarItemWidth: 16,
                    toolbarItemHeight: 16,
                    bloggerMode: false,
                    stripBrs: false,
                    tagName: "pre",
                    strings: {
                        expandSource: "expand source",
                        viewSource: "view source",
                        copyToClipboard: "copy to clipboard",
                        copyToClipboardConfirmation: "The code is in your clipboard now",
                        print: "print",
                        help: "?",
                        alert: "SyntaxHighlighter\n\n",
                        noBrush: "Can't find brush for: ",
                        brushNotHtmlScript: "Brush wasn't configured for html-script option: ",
                        aboutDialog: "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><title>About SyntaxHighlighter</title></head><body style=\"font-family:Geneva,Arial,Helvetica,sans-serif;background-color:#fff;color:#000;font-size:1em;text-align:center;\"><div style=\"text-align:center;margin-top:3em;\"><div style=\"font-size:xx-large;\">SyntaxHighlighter</div><div style=\"font-size:.75em;margin-bottom:4em;\"><div>version 2.0.320 (May 03 2009)</div><div><a href=\"http://alexgorbatchev.com\" target=\"_blank\" style=\"color:#0099FF;text-decoration:none;\">http://alexgorbatchev.com</a></div></div><div>JavaScript code syntax highlighter.</div><div>Copyright 2004-2009 Alex Gorbatchev.</div></div></body></html>"
                    },
                    debug: false
                },
                vars: {
                    discoveredBrushes: null,
                    spaceWidth: null,
                    printFrame: null,
                    highlighters: {}
                },
                brushes: {},
                regexLib: {
                    multiLineCComments: /\/\*[\s\S]*?\*\//gm,
                    singleLineCComments: /\/\/.*$/gm,
                    singleLinePerlComments: /#.*$/gm,
                    doubleQuotedString: /"(?:\.|(\\\")|[^\""\n])*"/g,
                    singleQuotedString: /'(?:\.|(\\\')|[^\''\n])*'/g,
                    multiLineDoubleQuotedString: /"(?:\.|(\\\")|[^\""])*"/g,
                    multiLineSingleQuotedString: /'(?:\.|(\\\')|[^\''])*'/g,
                    url: /\w+:\/\/[\w-.\/?%&=]*/g,
                    phpScriptTags: {
                        left: /(&lt;|<)\?=?/g,
                        right: /\?(&gt;|>)/g
                    },
                    aspScriptTags: {
                        left: /(&lt;|<)%=?/g,
                        right: /%(&gt;|>)/g
                    },
                    scriptScriptTags: {
                        left: /(&lt;|<)\s*script.*?(&gt;|>)/gi,
                        right: /(&lt;|<)\/\s*script\s*(&gt;|>)/gi
                    }
                },
                toolbar: {
                    create: function (_2) {
                        var _3 = document.createElement("DIV"),
                            _4 = sh.toolbar.items;
                        _3.className = "toolbar";
                        for (var _5 in _4) {
                            var _6 = _4[_5],
                                _7 = new _6(_2),
                                _8 = _7.create();
                            _2.toolbarCommands[_5] = _7;
                            if (_8 == null) {
                                continue
                            }
                            if (typeof (_8) == "string") {
                                _8 = sh.toolbar.createButton(_8, _2.id, _5)
                            }
                            _8.className += "item " + _5;
                            _3.appendChild(_8)
                        }
                        return _3
                    },
                    createButton: function (_9, _a, _b) {
                        var a = document.createElement("a"),
                            _d = a.style,
                            _e = sh.config,
                            _f = _e.toolbarItemWidth,
                            _10 = _e.toolbarItemHeight;
                        a.href = "#" + _b;
                        a.title = _9;
                        a.highlighterId = _a;
                        a.commandName = _b;
                        a.innerHTML = _9;
                        if (isNaN(_f) == false) {
                            _d.width = _f + "px"
                        }
                        if (isNaN(_10) == false) {
                            _d.height = _10 + "px"
                        }
                        a.onclick = function (e) {
                            try {
                                sh.toolbar.executeCommand(this, e || window.event, this.highlighterId, this.commandName)
                            } catch (e) {
                                sh.utils.alert(e.message)
                            }
                            return false
                        };
                        return a
                    },
                    executeCommand: function (_12, _13, _14, _15, _16) {
                        var _17 = sh.vars.highlighters[_14],
                            _18;
                        if (_17 == null || (_18 = _17.toolbarCommands[_15]) == null) {
                            return null
                        }
                        return _18.execute(_12, _13, _16)
                    },
                    items: {
                        expandSource: function (_19) {
                            this.create = function () {
                                if (_19.getParam("collapse") != true) {
                                    return
                                }
                                return sh.config.strings.expandSource
                            };
                            this.execute = function (_1a, _1b, _1c) {
                                var div = _19.div;
                                _1a.parentNode.removeChild(_1a);
                                div.className = div.className.replace("collapsed", "")
                            }
                        },
                        viewSource: function (_1e) {
                            this.create = function () {
                                return sh.config.strings.viewSource
                            };
                            this.execute = function (_1f, _20, _21) {
                                var _22 = sh.utils.fixInputString(_1e.originalCode).replace(/</g, "&lt;"),
                                    wnd = sh.utils.popup("", "_blank", 750, 400, "location=0, resizable=1, menubar=0, scrollbars=1");
                                _22 = sh.utils.unindent(_22);
                                wnd.document.write("<pre>" + _22 + "</pre>");
                                wnd.document.close()
                            }
                        },
                        copyToClipboard: function (_24) {
                            var _25, _26, _27 = _24.id;
                            this.create = function () {
                                var _28 = sh.config;
                                if (_28.clipboardSwf == null) {
                                    return null
                                }
                                function params(_29) {
                                    var _2a = "";
                                    for (var _2b in _29) {
                                        _2a += "<param name='" + _2b + "' value='" + _29[_2b] + "'/>"
                                    }
                                    return _2a
                                };

                                function attributes(_2c) {
                                    var _2d = "";
                                    for (var _2e in _2c) {
                                        _2d += " " + _2e + "='" + _2c[_2e] + "'"
                                    }
                                    return _2d
                                };
                                var _2f = {
                                    width: _28.toolbarItemWidth,
                                    height: _28.toolbarItemHeight,
                                    id: _27 + "_clipboard",
                                    type: "application/x-shockwave-flash",
                                    title: sh.config.strings.copyToClipboard
                                },
                                    _30 = {
                                        allowScriptAccess: "always",
                                        wmode: "transparent",
                                        flashVars: "highlighterId=" + _27,
                                        menu: "false"
                                    },
                                    swf = _28.clipboardSwf,
                                    _32;
                                if (/msie/i.test(navigator.userAgent)) {
                                    _32 = "<object" + attributes({
                                        classid: "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",
                                        codebase: "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0"
                                    }) + attributes(_2f) + ">" + params(_30) + params({
                                        movie: swf
                                    }) + "</object>"
                                } else {
                                    _32 = "<embed" + attributes(_2f) + attributes(_30) + attributes({
                                        src: swf
                                    }) + "/>"
                                }
                                _25 = document.createElement("div");
                                _25.innerHTML = _32;
                                return _25
                            };
                            this.execute = function (_33, _34, _35) {
                                var _36 = _35.command;
                                switch (_36) {
                                case "get":
                                    var _37 = sh.utils.unindent(sh.utils.fixInputString(_24.originalCode).replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&"));
                                    if (window.clipboardData) {
                                        window.clipboardData.setData("text", _37)
                                    } else {
                                        return sh.utils.unindent(_37)
                                    }
                                case "ok":
                                    sh.utils.alert(sh.config.strings.copyToClipboardConfirmation);
                                    break;
                                case "error":
                                    sh.utils.alert(_35.message);
                                    break
                                }
                            }
                        },
                        printSource: function (_38) {
                            this.create = function () {
                                return sh.config.strings.print
                            };
                            this.execute = function (_39, _3a, _3b) {
                                var _3c = document.createElement("IFRAME"),
                                    doc = null;
                                if (sh.vars.printFrame != null) {
                                    document.body.removeChild(sh.vars.printFrame)
                                }
                                sh.vars.printFrame = _3c;
                                _3c.style.cssText = "position:absolute;width:0px;height:0px;left:-500px;top:-500px;";
                                document.body.appendChild(_3c);
                                doc = _3c.contentWindow.document;
                                copyStyles(doc, window.document);
                                doc.write("<div class=\"" + _38.div.className.replace("collapsed", "") + " printing\">" + _38.div.innerHTML + "</div>");
                                doc.close();
                                _3c.contentWindow.focus();
                                _3c.contentWindow.print();

                                function copyStyles(_3e, _3f) {
                                    var _40 = _3f.getElementsByTagName("link");
                                    for (var i = 0; i < _40.length; i++) {
                                        if (_40[i].rel.toLowerCase() == "stylesheet" && /shCore\.css$/.test(_40[i].href)) {
                                            _3e.write("<link type=\"text/css\" rel=\"stylesheet\" href=\"" + _40[i].href + "\"></link>")
                                        }
                                    }
                                }
                            }
                        },
                        about: function (_42) {
                            this.create = function () {
                                return sh.config.strings.help
                            };
                            this.execute = function (_43, _44) {
                                var wnd = sh.utils.popup("", "_blank", 500, 250, "scrollbars=0"),
                                    doc = wnd.document;
                                doc.write(sh.config.strings.aboutDialog);
                                doc.close();
                                wnd.focus()
                            }
                        }
                    }
                },
                utils: {
                    guid: function (_47) {
                        return _47 + Math.round(Math.random() * 1000000).toString()
                    },
                    merge: function (_48, _49) {
                        var _4a = {},
                            _4b;
                        for (_4b in _48) {
                            _4a[_4b] = _48[_4b]
                        }
                        for (_4b in _49) {
                            _4a[_4b] = _49[_4b]
                        }
                        return _4a
                    },
                    toBoolean: function (_4c) {
                        switch (_4c) {
                        case "true":
                            return true;
                        case "false":
                            return false
                        }
                        return _4c
                    },
                    popup: function (url, _4e, _4f, _50, _51) {
                        var x = (screen.width - _4f) / 2,
                            y = (screen.height - _50) / 2;
                        _51 += ", left=" + x + ", top=" + y + ", width=" + _4f + ", height=" + _50;
                        _51 = _51.replace(/^,/, "");
                        var win = window.open(url, _4e, _51);
                        win.focus();
                        return win
                    },
                    addEvent: function (obj, _56, _57) {
                        if (obj.attachEvent) {
                            obj["e" + _56 + _57] = _57;
                            obj[_56 + _57] = function () {
                                obj["e" + _56 + _57](window.event)
                            };
                            obj.attachEvent("on" + _56, obj[_56 + _57])
                        } else {
                            obj.addEventListener(_56, _57, false)
                        }
                    },
                    alert: function (str) {
                        alert(sh.config.strings.alert + str)
                    },
                    findBrush: function (_59, _5a) {
                        var _5b = sh.vars.discoveredBrushes,
                            _5c = null;
                        if (_5b == null) {
                            _5b = {};
                            for (var _5d in sh.brushes) {
                                var _5e = sh.brushes[_5d].aliases;
                                if (_5e == null) {
                                    continue
                                }
                                for (var i = 0; i < _5e.length; i++) {
                                    _5b[_5e[i]] = _5d
                                }
                            }
                            sh.vars.discoveredBrushes = _5b
                        }
                        _5c = sh.brushes[_5b[_59]];
                        if (_5c == null && _5a != false) {
                            sh.utils.alert(sh.config.strings.noBrush + _59)
                        }
                        return _5c
                    },
                    eachLine: function (str, _61) {
                        var _62 = str.split("\n");
                        for (var i = 0; i < _62.length; i++) {
                            _62[i] = _61(_62[i])
                        }
                        return _62.join("\n")
                    },
                    createRuler: function () {
                        var div = document.createElement("div"),
                            _65 = document.createElement("div"),
                            _66 = 10,
                            i = 1;
                        while (i <= 150) {
                            if (i % _66 === 0) {
                                div.innerHTML += i;
                                i += (i + "").length
                            } else {
                                div.innerHTML += "&middot;";
                                i++
                            }
                        }
                        _65.className = "ruler line";
                        _65.appendChild(div);
                        return _65
                    },
                    trimFirstAndLastLines: function (str) {
                        return str.replace(/^[ ]*[\n]+|[\n]*[ ]*$/g, "")
                    },
                    parseParams: function (str) {
                        var _6a, _6b = {},
                            _6c = new XRegExp("^\\[(?<values>(.*?))\\]$"),
                            _6d = new XRegExp("(?<name>[\\w-]+)" + "\\s*:\\s*" + "(?<value>" + "[\\w-%#]+|" + "\\[.*?\\]|" + "\".*?\"|" + "'.*?'" + ")\\s*;?", "g");
                        while ((_6a = _6d.exec(str)) != null) {
                            var _6e = _6a.value.replace(/^['"]|['"]$/g, "");
                            if (_6e != null && _6c.test(_6e)) {
                                var m = _6c.exec(_6e);
                                _6e = m.values.length > 0 ? m.values.split(/\s*,\s*/) : []
                            }
                            _6b[_6a.name] = _6e
                        }
                        return _6b
                    },
                    decorate: function (str, css) {
                        if (str == null || str.length == 0 || str == "\n") {
                            return str
                        }
                        str = str.replace(/</g, "&lt;");
                        str = str.replace(/ {2,}/g, function (m) {
                            var _73 = "";
                            for (var i = 0; i < m.length - 1; i++) {
                                _73 += "&nbsp;"
                            }
                            return _73 + " "
                        });
                        if (css != null) {
                            str = sh.utils.eachLine(str, function (_75) {
                                if (_75.length == 0) {
                                    return ""
                                }
                                var _76 = "";
                                _75 = _75.replace(/^(&nbsp;| )+/, function (s) {
                                    _76 = s;
                                    return ""
                                });
                                if (_75.length == 0) {
                                    return _76
                                }
                                return _76 + "<code class=\"" + css + "\">" + _75 + "</code>"
                            })
                        }
                        return str
                    },
                    padNumber: function (_78, _79) {
                        var _7a = _78.toString();
                        while (_7a.length < _79) {
                            _7a = "0" + _7a
                        }
                        return _7a
                    },
                    measureSpace: function () {
                        var _7b = document.createElement("div"),
                            _7c, _7d = 0,
                            _7e = document.body,
                            id = sh.utils.guid("measureSpace"),
                            _80 = "<div class=\"",
                            _81 = "</div>",
                            _82 = "</span>";
                        _7b.innerHTML = _80 + "syntaxhighlighter\">" + _80 + "lines\">" + _80 + "line\">" + _80 + "content" + "\"><span class=\"block\"><span id=\"" + id + "\">&nbsp;" + _82 + _82 + _81 + _81 + _81 + _81;
                        _7e.appendChild(_7b);
                        _7c = document.getElementById(id);
                        if (/opera/i.test(navigator.userAgent)) {
                            var _83 = window.getComputedStyle(_7c, null);
                            _7d = parseInt(_83.getPropertyValue("width"))
                        } else {
                            _7d = _7c.offsetWidth
                        }
                        _7e.removeChild(_7b);
                        return _7d
                    },
                    processTabs: function (_84, _85) {
                        var tab = "";
                        for (var i = 0; i < _85; i++) {
                            tab += " "
                        }
                        return _84.replace(/\t/g, tab)
                    },
                    processSmartTabs: function (_88, _89) {
                        var _8a = _88.split("\n"),
                            tab = "\t",
                            _8c = "";
                        for (var i = 0; i < 50; i++) {
                            _8c += "                    "
                        }
                        function insertSpaces(_8e, pos, _90) {
                            return _8e.substr(0, pos) + _8c.substr(0, _90) + _8e.substr(pos + 1, _8e.length)
                        };
                        _88 = sh.utils.eachLine(_88, function (_91) {
                            if (_91.indexOf(tab) == -1) {
                                return _91
                            }
                            var pos = 0;
                            while ((pos = _91.indexOf(tab)) != -1) {
                                var _93 = _89 - pos % _89;
                                _91 = insertSpaces(_91, pos, _93)
                            }
                            return _91
                        });
                        return _88
                    },
                    fixInputString: function (str) {
                        var br = /<br\s*\/?>|&lt;br\s*\/?&gt;/gi;
                        if (sh.config.bloggerMode == true) {
                            str = str.replace(br, "\n")
                        }
                        if (sh.config.stripBrs == true) {
                            str = str.replace(br, "")
                        }
                        return str
                    },
                    trim: function (str) {
                        return str.replace(/\s*$/g, "").replace(/^\s*/, "")
                    },
                    unindent: function (str) {
                        var _98 = sh.utils.fixInputString(str).split("\n"),
                            _99 = new Array(),
                            _9a = /^\s*/,
                            min = 1000;
                        for (var i = 0; i < _98.length && min > 0; i++) {
                            var _9d = _98[i];
                            if (sh.utils.trim(_9d).length == 0) {
                                continue
                            }
                            var _9e = _9a.exec(_9d);
                            if (_9e == null) {
                                return str
                            }
                            min = Math.min(_9e[0].length, min)
                        }
                        if (min > 0) {
                            for (var i = 0; i < _98.length; i++) {
                                _98[i] = _98[i].substr(min)
                            }
                        }
                        return _98.join("\n")
                    },
                    matchesSortCallback: function (m1, m2) {
                        if (m1.index < m2.index) {
                            return -1
                        } else {
                            if (m1.index > m2.index) {
                                return 1
                            } else {
                                if (m1.length < m2.length) {
                                    return -1
                                } else {
                                    if (m1.length > m2.length) {
                                        return 1
                                    }
                                }
                            }
                        }
                        return 0
                    },
                    getMatches: function (_a1, _a2) {
                        function defaultAdd(_a3, _a4) {
                            return [new sh.Match(_a3[0], _a3.index, _a4.css)]
                        };
                        var _a5 = 0,
                            _a6 = null,
                            _a7 = [],
                            _a8 = _a2.func ? _a2.func : defaultAdd;
                        while ((_a6 = _a2.regex.exec(_a1)) != null) {
                            _a7 = _a7.concat(_a8(_a6, _a2))
                        }
                        return _a7
                    },
                    processUrls: function (_a9) {
                        return _a9.replace(sh.regexLib.url, function (m) {
                            return "<a href=\"" + m + "\">" + m + "</a>"
                        })
                    }
                },
                highlight: function (_ab, _ac) {
                    function toArray(_ad) {
                        var _ae = [];
                        for (var i = 0; i < _ad.length; i++) {
                            _ae.push(_ad[i])
                        }
                        return _ae
                    };
                    var _b0 = _ac ? [_ac] : toArray(document.getElementsByTagName(sh.config.tagName)),
                        _b1 = "innerHTML",
                        _b2 = null;
                    if (_b0.length === 0) {
                        return
                    }
                    for (var i = 0; i < _b0.length; i++) {
                        var _b4 = _b0[i],
                            _b5 = sh.utils.parseParams(_b4.className),
                            _b6;
                        _b5 = sh.utils.merge(_ab, _b5);
                        _b6 = _b5["brush"];
                        if (_b6 == null) {
                            continue
                        }
                        if (_b5["html-script"] == "true") {
                            _b2 = new sh.HtmlScript(_b6)
                        } else {
                            var _b7 = sh.utils.findBrush(_b6);
                            if (_b7) {
                                _b2 = new _b7()
                            } else {
                                continue
                            }
                        }
                        _b2.highlight(_b4[_b1], _b5);
                        var _b8 = _b2.div;
                        if (sh.config.debug) {
                            _b8 = document.createElement("textarea");
                            _b8.value = _b2.div.innerHTML;
                            _b8.style.width = "70em";
                            _b8.style.height = "30em"
                        }
                        _b4.parentNode.replaceChild(_b8, _b4)
                    }
                },
                all: function (_b9) {
                    sh.utils.addEvent(window, "load", function () {
                        sh.highlight(_b9)
                    })
                }
            };
            sh.Match = function (_ba, _bb, css) {
                this.value = _ba;
                this.index = _bb;
                this.length = _ba.length;
                this.css = css
            };
            sh.Match.prototype.toString = function () {
                return this.value
            };
            sh.HtmlScript = function (_bd) {
                var _be = sh.utils.findBrush(_bd),
                    _bf = new sh.brushes.Xml(),
                    _c0 = null;
                if (_be == null) {
                    return
                }
                _be = new _be();
                this.xmlBrush = _bf;
                if (_be.htmlScript == null) {
                    sh.utils.alert(sh.config.strings.brushNotHtmlScript + _bd);
                    return
                }
                _bf.regexList.push({
                    regex: _be.htmlScript.code,
                    func: process
                });

                function offsetMatches(_c1, _c2) {
                    for (var j = 0; j < _c1.length; j++) {
                        _c1[j].index += _c2
                    }
                };

                function process(_c4, _c5) {
                    var _c6 = _c4.code,
                        _c7 = [],
                        _c8 = _be.regexList,
                        _c9 = _c4.index + _c4.left.length,
                        _ca = _be.htmlScript,
                        _cb;
                    for (var i = 0; i < _c8.length; i++) {
                        _cb = sh.utils.getMatches(_c6, _c8[i]);
                        offsetMatches(_cb, _c9);
                        _c7 = _c7.concat(_cb)
                    }
                    if (_ca.left != null && _c4.left != null) {
                        _cb = sh.utils.getMatches(_c4.left, _ca.left);
                        offsetMatches(_cb, _c4.index);
                        _c7 = _c7.concat(_cb)
                    }
                    if (_ca.right != null && _c4.right != null) {
                        _cb = sh.utils.getMatches(_c4.right, _ca.right);
                        offsetMatches(_cb, _c4.index + _c4[0].lastIndexOf(_c4.right));
                        _c7 = _c7.concat(_cb)
                    }
                    return _c7
                }
            };
            sh.HtmlScript.prototype.highlight = function (_cd, _ce) {
                this.xmlBrush.highlight(_cd, _ce);
                this.div = this.xmlBrush.div
            };
            sh.Highlighter = function () {};
            sh.Highlighter.prototype = {
                getParam: function (_cf, _d0) {
                    var _d1 = this.params[_cf];
                    return sh.utils.toBoolean(_d1 == null ? _d0 : _d1)
                },
                create: function (_d2) {
                    return document.createElement(_d2)
                },
                findMatches: function (_d3, _d4) {
                    var _d5 = [];
                    if (_d3 != null) {
                        for (var i = 0; i < _d3.length; i++) {
                            _d5 = _d5.concat(sh.utils.getMatches(_d4, _d3[i]))
                        }
                    }
                    _d5 = _d5.sort(sh.utils.matchesSortCallback);
                    return _d5
                },
                removeNestedMatches: function () {
                    var _d7 = this.matches;
                    for (var i = 0; i < _d7.length; i++) {
                        if (_d7[i] === null) {
                            continue
                        }
                        var _d9 = _d7[i],
                            _da = _d9.index + _d9.length;
                        for (var j = i + 1; j < _d7.length && _d7[i] !== null; j++) {
                            var _dc = _d7[j];
                            if (_dc === null) {
                                continue
                            } else {
                                if (_dc.index > _da) {
                                    break
                                } else {
                                    if (_dc.index == _d9.index && _dc.length > _d9.length) {
                                        this.matches[i] = null
                                    } else {
                                        if (_dc.index >= _d9.index && _dc.index < _da) {
                                            this.matches[j] = null
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                createDisplayLines: function (_dd) {
                    var _de = _dd.split(/\n/g),
                        _df = parseInt(this.getParam("first-line")),
                        _e0 = (_df + _de.length).toString().length,
                        _e1 = this.getParam("highlight", []);
                    _dd = "";
                    for (var i = 0; i < _de.length; i++) {
                        var _e3 = _de[i],
                            _e4 = /^(&nbsp;|\s)+/.exec(_e3),
                            _e5 = "line alt" + (i % 2 == 0 ? 1 : 2),
                            _e6 = sh.utils.padNumber(_df + i, _e0),
                            _e7 = _e1.indexOf((_df + i).toString()) != -1,
                            _e8 = null;
                        if (_e4 != null) {
                            _e8 = _e4[0].toString();
                            _e3 = _e3.substr(_e8.length);
                            _e8 = _e8.replace(/&nbsp;/g, " ");
                            _e4 = sh.vars.spaceWidth * _e8.length
                        } else {
                            _e4 = 0
                        }
                        _e3 = sh.utils.trim(_e3);
                        if (_e3.length == 0) {
                            _e3 = "&nbsp;"
                        }
                        if (_e7) {
                            _e5 += " highlighted"
                        }
                        _dd += "<div class=\"" + _e5 + "\">" + "<code class=\"number\">" + _e6 + ".</code>" + "<span class=\"content\">" + (_e8 != null ? "<code class=\"spaces\">" + _e8.replace(/\s/g, "&nbsp;") + "</code>" : "") + "<span class=\"block\" style=\"margin-left: " + _e4 + "px !important;\">" + _e3 + "</span>" + "</span>" + "</div>"
                    }
                    return _dd
                },
                processMatches: function (_e9, _ea) {
                    var pos = 0,
                        _ec = "",
                        _ed = sh.utils.decorate;
                    for (var i = 0; i < _ea.length; i++) {
                        var _ef = _ea[i];
                        if (_ef === null || _ef.length === 0) {
                            continue
                        }
                        _ec += _ed(_e9.substr(pos, _ef.index - pos), "plain") + _ed(_ef.value, _ef.css);
                        pos = _ef.index + _ef.length
                    }
                    _ec += _ed(_e9.substr(pos), "plain");
                    return _ec
                },
                highlight: function (_f0, _f1) {
                    var _f2 = sh.config,
                        _f3 = sh.vars,
                        div, _f5, _f6, _f7 = "important";
                    this.params = {};
                    this.div = null;
                    this.lines = null;
                    this.code = null;
                    this.bar = null;
                    this.toolbarCommands = {};
                    this.id = sh.utils.guid("highlighter_");
                    _f3.highlighters[this.id] = this;
                    if (_f0 === null) {
                        _f0 = ""
                    }
                    if (_f3.spaceWidth === null) {
                        _f3.spaceWidth = sh.utils.measureSpace()
                    }
                    this.params = sh.utils.merge(sh.defaults, _f1 || {});
                    if (this.getParam("light") == true) {
                        this.params.toolbar = this.params.gutter = false
                    }
                    this.div = div = this.create("DIV");
                    this.lines = this.create("DIV");
                    this.lines.className = "lines";
                    className = "syntaxhighlighter";
                    div.id = this.id;
                    if (this.getParam("collapse")) {
                        className += " collapsed"
                    }
                    if (this.getParam("gutter") == false) {
                        className += " nogutter"
                    }
                    if (this.getParam("wrap-lines") == false) {
                        this.lines.className += " no-wrap"
                    }
                    className += " " + this.getParam("class-name");
                    div.className = className;
                    this.originalCode = _f0;
                    this.code = sh.utils.trimFirstAndLastLines(_f0).replace(/\r/g, " ");
                    _f6 = this.getParam("tab-size");
                    this.code = this.getParam("smart-tabs") == true ? sh.utils.processSmartTabs(this.code, _f6) : sh.utils.processTabs(this.code, _f6);
                    this.code = sh.utils.unindent(this.code);
                    if (this.getParam("toolbar")) {
                        this.bar = this.create("DIV");
                        this.bar.className = "bar";
                        this.bar.appendChild(sh.toolbar.create(this));
                        div.appendChild(this.bar);
                        var bar = this.bar;

                        function hide() {
                            bar.className = bar.className.replace("show", "")
                        };
                        div.onmouseover = function () {
                            hide();
                            bar.className += " show"
                        };
                        div.onmouseout = function () {
                            hide()
                        }
                    }
                    if (this.getParam("ruler")) {
                        div.appendChild(sh.utils.createRuler())
                    }
                    div.appendChild(this.lines);
                    this.matches = this.findMatches(this.regexList, this.code);
                    this.removeNestedMatches();
                    _f0 = this.processMatches(this.code, this.matches);
                    _f0 = this.createDisplayLines(sh.utils.trim(_f0));
                    if (this.getParam("auto-links")) {
                        _f0 = sh.utils.processUrls(_f0)
                    }
                    this.lines.innerHTML = _f0
                },
                getKeywords: function (str) {
                    str = str.replace(/^\s+|\s+$/g, "").replace(/\s+/g, "\\b|\\b");
                    return "\\b" + str + "\\b"
                },
                forHtmlScript: function (_fa) {
                    this.htmlScript = {
                        left: {
                            regex: _fa.left,
                            css: "script"
                        },
                        right: {
                            regex: _fa.right,
                            css: "script"
                        },
                        code: new XRegExp("(?<left>" + _fa.left.source + ")" + "(?<code>.*?)" + "(?<right>" + _fa.right.source + ")", "sgi")
                    }
                }
            };
            return sh
        }()
}
if (!Array.indexOf) {
    Array.prototype.indexOf = function (_fb, _fc) {
        _fc = Math.max(_fc || 0, 0);
        for (var i = _fc; i < this.length; i++) {
            if (this[i] == _fb) {
                return i
            }
        }
        return -1
    }
}
if (!window.XRegExp) {
    (function () {
        var _fe = {
            exec: RegExp.prototype.exec,
            match: String.prototype.match,
            replace: String.prototype.replace,
            split: String.prototype.split
        },
            lib = {
                part: /(?:[^\\([#\s.]+|\\(?!k<[\w$]+>|[pP]{[^}]+})[\S\s]?|\((?=\?(?!#|<[\w$]+>)))+|(\()(?:\?(?:(#)[^)]*\)|<([$\w]+)>))?|\\(?:k<([\w$]+)>|[pP]{([^}]+)})|(\[\^?)|([\S\s])/g,
                replaceVar: /(?:[^$]+|\$(?![1-9$&`']|{[$\w]+}))+|\$(?:([1-9]\d*|[$&`'])|{([$\w]+)})/g,
                extended: /^(?:\s+|#.*)+/,
                quantifier: /^(?:[?*+]|{\d+(?:,\d*)?})/,
                classLeft: /&&\[\^?/g,
                classRight: /]/g
            },
            _100 = function (_101, item, from) {
                for (var i = from || 0; i < _101.length; i++) {
                    if (_101[i] === item) {
                        return i
                    }
                }
                return -1
            },
            _105 = /()??/.exec("")[1] !== undefined,
            _106 = {};
        XRegExp = function (_107, _108) {
            if (_107 instanceof RegExp) {
                if (_108 !== undefined) {
                    throw TypeError("can't supply flags when constructing one RegExp from another")
                }
                return _107.addFlags()
            }
            var _108 = _108 || "",
                _109 = _108.indexOf("s") > -1,
                _10a = _108.indexOf("x") > -1,
                _10b = false,
                _10c = [],
                _10d = [],
                part = lib.part,
                _10f, cc, len, _112, _113;
            part.lastIndex = 0;
            while (_10f = _fe.exec.call(part, _107)) {
                if (_10f[2]) {
                    if (!lib.quantifier.test(_107.slice(part.lastIndex))) {
                        _10d.push("(?:)")
                    }
                } else {
                    if (_10f[1]) {
                        _10c.push(_10f[3] || null);
                        if (_10f[3]) {
                            _10b = true
                        }
                        _10d.push("(")
                    } else {
                        if (_10f[4]) {
                            _112 = _100(_10c, _10f[4]);
                            _10d.push(_112 > -1 ? "\\" + (_112 + 1) + (isNaN(_107.charAt(part.lastIndex)) ? "" : "(?:)") : _10f[0])
                        } else {
                            if (_10f[5]) {
                                _10d.push(_106.unicode ? _106.unicode.get(_10f[5], _10f[0].charAt(1) === "P") : _10f[0])
                            } else {
                                if (_10f[6]) {
                                    if (_107.charAt(part.lastIndex) === "]") {
                                        _10d.push(_10f[6] === "[" ? "(?!)" : "[\\S\\s]");
                                        part.lastIndex++
                                    } else {
                                        cc = XRegExp.matchRecursive("&&" + _107.slice(_10f.index), lib.classLeft, lib.classRight, "", {
                                            escapeChar: "\\"
                                        })[0];
                                        _10d.push(_10f[6] + cc + "]");
                                        part.lastIndex += cc.length + 1
                                    }
                                } else {
                                    if (_10f[7]) {
                                        if (_109 && _10f[7] === ".") {
                                            _10d.push("[\\S\\s]")
                                        } else {
                                            if (_10a && lib.extended.test(_10f[7])) {
                                                len = _fe.exec.call(lib.extended, _107.slice(part.lastIndex - 1))[0].length;
                                                if (!lib.quantifier.test(_107.slice(part.lastIndex - 1 + len))) {
                                                    _10d.push("(?:)")
                                                }
                                                part.lastIndex += len - 1
                                            } else {
                                                _10d.push(_10f[7])
                                            }
                                        }
                                    } else {
                                        _10d.push(_10f[0])
                                    }
                                }
                            }
                        }
                    }
                }
            }
            _113 = RegExp(_10d.join(""), _fe.replace.call(_108, /[sx]+/g, ""));
            _113._x = {
                source: _107,
                captureNames: _10b ? _10c : null
            };
            return _113
        };
        XRegExp.addPlugin = function (name, o) {
            _106[name] = o
        };
        RegExp.prototype.exec = function (str) {
            var _117 = _fe.exec.call(this, str),
                name, i, r2;
            if (_117) {
                if (_105 && _117.length > 1) {
                    r2 = new RegExp("^" + this.source + "$(?!\\s)", this.getNativeFlags());
                    _fe.replace.call(_117[0], r2, function () {
                        for (i = 1; i < arguments.length - 2; i++) {
                            if (arguments[i] === undefined) {
                                _117[i] = undefined
                            }
                        }
                    })
                }
                if (this._x && this._x.captureNames) {
                    for (i = 1; i < _117.length; i++) {
                        name = this._x.captureNames[i - 1];
                        if (name) {
                            _117[name] = _117[i]
                        }
                    }
                }
                if (this.global && this.lastIndex > (_117.index + _117[0].length)) {
                    this.lastIndex--
                }
            }
            return _117
        }
    })()
}
RegExp.prototype.getNativeFlags = function () {
    return (this.global ? "g" : "") + (this.ignoreCase ? "i" : "") + (this.multiline ? "m" : "") + (this.extended ? "x" : "") + (this.sticky ? "y" : "")
};
RegExp.prototype.addFlags = function (_11b) {
    var _11c = new XRegExp(this.source, (_11b || "") + this.getNativeFlags());
    if (this._x) {
        _11c._x = {
            source: this._x.source,
            captureNames: this._x.captureNames ? this._x.captureNames.slice(0) : null
        }
    }
    return _11c
};
RegExp.prototype.call = function (_11d, str) {
    return this.exec(str)
};
RegExp.prototype.apply = function (_11f, args) {
    return this.exec(args[0])
};
XRegExp.cache = function (_121, _122) {
    var key = "/" + _121 + "/" + (_122 || "");
    return XRegExp.cache[key] || (XRegExp.cache[key] = new XRegExp(_121, _122))
};
XRegExp.escape = function (str) {
    return str.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, "\\$&")
};
XRegExp.matchRecursive = function (str, left, _127, _128, _129) {
    var _129 = _129 || {},
        _12a = _129.escapeChar,
        vN = _129.valueNames,
        _128 = _128 || "",
        _12c = _128.indexOf("g") > -1,
        _12d = _128.indexOf("i") > -1,
        _12e = _128.indexOf("m") > -1,
        _12f = _128.indexOf("y") > -1,
        _128 = _128.replace(/y/g, ""),
        left = left instanceof RegExp ? (left.global ? left : left.addFlags("g")) : new XRegExp(left, "g" + _128),
        _127 = _127 instanceof RegExp ? (_127.global ? _127 : _127.addFlags("g")) : new XRegExp(_127, "g" + _128),
        _130 = [],
        _131 = 0,
        _132 = 0,
        _133 = 0,
        _134 = 0,
        _135, _136, _137, _138, _139, esc;
    if (_12a) {
        if (_12a.length > 1) {
            throw SyntaxError("can't supply more than one escape character")
        }
        if (_12e) {
            throw TypeError("can't supply escape character when using the multiline flag")
        }
        _139 = XRegExp.escape(_12a);
        esc = new RegExp("^(?:" + _139 + "[\\S\\s]|(?:(?!" + left.source + "|" + _127.source + ")[^" + _139 + "])+)+", _12d ? "i" : "")
    }
    while (true) {
        left.lastIndex = _127.lastIndex = _133 + (_12a ? (esc.exec(str.slice(_133)) || [""])[0].length : 0);
        _137 = left.exec(str);
        _138 = _127.exec(str);
        if (_137 && _138) {
            if (_137.index <= _138.index) {
                _138 = null
            } else {
                _137 = null
            }
        }
        if (_137 || _138) {
            _132 = (_137 || _138).index;
            _133 = (_137 ? left : _127).lastIndex
        } else {
            if (!_131) {
                break
            }
        }
        if (_12f && !_131 && _132 > _134) {
            break
        }
        if (_137) {
            if (!_131++) {
                _135 = _132;
                _136 = _133
            }
        } else {
            if (_138 && _131) {
                if (!--_131) {
                    if (vN) {
                        if (vN[0] && _135 > _134) {
                            _130.push([vN[0], str.slice(_134, _135), _134, _135])
                        }
                        if (vN[1]) {
                            _130.push([vN[1], str.slice(_135, _136), _135, _136])
                        }
                        if (vN[2]) {
                            _130.push([vN[2], str.slice(_136, _132), _136, _132])
                        }
                        if (vN[3]) {
                            _130.push([vN[3], str.slice(_132, _133), _132, _133])
                        }
                    } else {
                        _130.push(str.slice(_136, _132))
                    }
                    _134 = _133;
                    if (!_12c) {
                        break
                    }
                }
            } else {
                left.lastIndex = _127.lastIndex = 0;
                throw Error("subject data contains unbalanced delimiters")
            }
        }
        if (_132 === _133) {
            _133++
        }
    }
    if (_12c && !_12f && vN && vN[0] && str.length > _134) {
        _130.push([vN[0], str.slice(_134), _134, str.length])
    }
    left.lastIndex = _127.lastIndex = 0;
    return _130
};